#include "instrument.h"
// #include "string.h"

char* FileRead(char* filename)
{
    char* text;
    FILE *pf = fopen(filename,"r");
    if(pf==NULL)
    {
        printf("File Error\n");
        exit(0);
    }
    fseek(pf,0,SEEK_END);
    long lSize = ftell(pf);
    // 用完后需要将内存free掉
    text=(char*)malloc(lSize+1);
    rewind(pf); 
    fread(text,sizeof(char),lSize,pf);
    text[lSize] = '\0';
    return text;
}



void splitid(char str[],char* monitorid[]){
	int i,j;
    int len=strlen(str);
    // char target="\"";
	for(i=j=0;str[i]!='\0';i++){
		if(i!=0){
			str[j++]=str[i];
		}
	}
	str[len-2]='\0';

    // char* monitorid[2]={NULL};
    char *token= strtok(str, "_");
    int index=0;
          while (token != NULL)
            {
                monitorid[index] = (char**)malloc((strlen(token)) * sizeof(char));
                strcpy(monitorid+index,token);
                // printf("%s %d\n", monitorid+index,strlen(token));
                token = strtok(NULL, "_");
                index++;
            }
}

void printJson(cJSON * root)//以递归的方式打印json的最内层键值对
{
    for(int i=0; i<cJSON_GetArraySize(root); i++)   //遍历最外层json键值对
    {
        cJSON * item = cJSON_GetArrayItem(root, i);        
        if(cJSON_Object == item->type)      //如果对应键的值仍为cJSON_Object就递归调用printJson
            printJson(item);
        else                                //值不为json对象就直接打印出键和值
        {
            printf("%s->", item->string);
            printf("%s\n", cJSON_Print(item));
        }
    }
}


cJSON * jsonParser(char * jsonStr)
{
    // char * jsonStr = "{\"semantic\":{\"slots\":{\"name\":\"张三\"}}, \"rc\":0, \"operation\":\"CALL\", \"service\":\"telephone\", \"text\":\"打电话给张三\"}";
    cJSON * root = NULL;

    root = cJSON_Parse(jsonStr);     
    if (!root) 
    {
        printf("Error before: [%s]\n",cJSON_GetErrorPtr());
    }
    else
    {
        return root;
    }    
}

cJSON* getJsonObj(cJSON * root, char * sitem)
{
        // cJSON * item = NULL;//cjson对象
        // printf("%s\n", "有格式的方式打印Json:");           
        // printf("%s\n\n", cJSON_Print(root));
        // printf("%s\n", "无格式方式打印json：");
        // printf("%s\n\n", cJSON_PrintUnformatted(root));

        // printf("%s\n", "一步一步的获取name 键值对:");
        // printf("%s\n", "获取semantic下的cjson对象:");
        // item = cJSON_GetObjectItem(root, "semantic");//
        // printf("%s\n", cJSON_Print(item));
        // printf("%s\n", "获取slots下的cjson对象");
        // item = cJSON_GetObjectItem(item, "slots");
        // printf("%s\n", cJSON_Print(item));
        // printf("%s\n", "获取name下的cjson对象");
        // item = cJSON_GetObjectItem(item, "name");
        // printf("%s\n", cJSON_Print(item));

        // printf("%s:", item->string);   //看一下cjson对象的结构体中这两个成员的意思
        // printf("%s\n", item->valuestring);
                        

        // printf("\n%s\n", "打印json所有最内层键值对:");
        // printJson(root);

    return cJSON_GetObjectItem(root,sitem);
}